home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-05-25 | 4.8 KB | 203 lines | [TEXT/CWIE] |
- /*
- File: LinkedListOfObject.cp
-
- Contains: stuff
-
- */
-
- #include "LinkedListOfObject.h"
-
- //--------------------------------------------------------------------------------
- bool LinkedListOfObject::IsObjectLink(void *objectPtr, ListLink* elem)
- {
- // we need to use this mapping to alow for the one object
- // to many link case
-
- return this->GetObjectFromLink(elem) == objectPtr;
- }
-
-
- //--------------------------------------------------------------------------------
- void* LinkedListOfObject::GetObjectFromLink(ListLink* link)
- {
- return link->GetObjectPtr();
- }
-
-
- //--------------------------------------------------------------------------------
- ListLink* LinkedListOfObject::GetLinkFromObject(void *objectPtr)
- {
- LinkedListIterator iter(*this);
-
- for (iter.FirstLink(); iter.MoreAfter(); iter.NextLink())
- {
- ListLink* elem = iter.CurrentLink();
-
- if (elem && (elem->GetObjectPtr() == objectPtr))
- {
- return elem;
- }
- }
-
- return nil;
- }
-
- //--------------------------------------------------------------------------------
- void LinkedListOfObject::AppendElement(void* elem)
- {
- this->AppendLink(*GetLinkFromObject(elem));
- }
-
- //--------------------------------------------------------------------------------
- void LinkedListOfObject::PrependElement(void* elem)
- {
- this->PrependLink(*GetLinkFromObject(elem));
- }
-
- //--------------------------------------------------------------------------------
- void LinkedListOfObject::RemoveElement(void* elem)
- {
- this->RemoveLink(*GetLinkFromObject(elem));
- }
-
- //--------------------------------------------------------------------------------
- IteratorForLinkedListOfObject::IteratorForLinkedListOfObject(LinkedListOfObject& list, ListLink* start)
- : LinkedListIterator(list, start),
- fObjectList(list),
- fBackwards(false),
- fCurrentSeen(false),
- fAtEndOfList(false),
- fCurrentObject(nil)
- {
- }
-
-
- //--------------------------------------------------------------------------------
- IteratorForLinkedListOfObject::~IteratorForLinkedListOfObject()
- {
- }
-
-
- //--------------------------------------------------------------------------------
- void IteratorForLinkedListOfObject::GotoFirst(void)
- {
- ListLink* link = this->FirstLink();
-
- fCurrentObject = (link ? fObjectList.GetObjectFromLink(link) : nil);
- fCurrentSeen = false;
- fBackwards = false;
- fAtEndOfList = true;
- }
-
-
- //--------------------------------------------------------------------------------
- void IteratorForLinkedListOfObject::GotoLast(void)
- {
- ListLink* link = this->LastLink();
-
- fCurrentObject = (link ? fObjectList.GetObjectFromLink(link) : nil);
- fCurrentSeen = false;
- fBackwards = true;
- fAtEndOfList = true;
- }
-
-
- //--------------------------------------------------------------------------------
- void IteratorForLinkedListOfObject::GotoNext(void)
- {
- ListLink* link = this->FirstLink();
-
- fCurrentObject = (link ? fObjectList.GetObjectFromLink(link) : nil);
- fCurrentSeen = false;
- fBackwards = false;
- fAtEndOfList = (fCurrentObject == nil);
- }
-
-
- //--------------------------------------------------------------------------------
- void IteratorForLinkedListOfObject::GotoPrev(void)
- {
- ListLink* link = this->FirstLink();
-
- fCurrentObject = (link ? fObjectList.GetObjectFromLink(link) : nil);
- fCurrentSeen = false;
- fBackwards = true;
- fAtEndOfList = (fCurrentObject == nil);
- }
-
-
- //--------------------------------------------------------------------------------
- void* IteratorForLinkedListOfObject::FirstObject(void)
- {
- fCurrentSeen = true;
- return this->FirstLink();
- }
-
- //--------------------------------------------------------------------------------
- void* IteratorForLinkedListOfObject::LastObject(void)
- {
- fCurrentSeen = true;
- return this->LastLink();
- }
-
- //--------------------------------------------------------------------------------
- void* IteratorForLinkedListOfObject::NextObject(void)
- {
- fCurrentSeen = true;
- return this->NextLink();
- }
-
- //--------------------------------------------------------------------------------
- void* IteratorForLinkedListOfObject::PrevObject(void)
- {
- fCurrentSeen = true;
- return this->PrevLink();
- }
-
- //--------------------------------------------------------------------------------
- void IteratorForLinkedListOfObject::LinkInserted(ListLink& link)
- {
- if (!fCurrentSeen)
- {
-
- }
-
- Inherited::LinkInserted(link);
- }
-
-
- //--------------------------------------------------------------------------------
- void IteratorForLinkedListOfObject::RemovingLink(ListLink& link)
- {
- if (&link == fCurrentLink) // If we're removing the current
- {
- if (fBackwards)
- {
- this->GotoPrev();
- }
- else
- {
- this->GotoNext();
- }
- }
-
- Inherited::RemovingLink(link);
-
- if (fAtEndOfList)
- {
- if (fBackwards)
- GotoFirst();
- else
- GotoLast();
- }
- }
-
-
- //--------------------------------------------------------------------------------
- void IteratorForLinkedListOfObject::RemovingAllLinks(void)
- {
- fCurrentObject = nil;
-
- Inherited::RemovingAllLinks();
- }
-